import tensorflow as tf

# 构建模型，原纯净语句：
model = tf.keras.Sequential([
    tf.keras.layers.Flatten(input_shape=(28, 28)),
    tf.keras.layers.Dense(128, activation='relu'),
    tf.keras.layers.Dense(10)
])

'''
# ----------------模型详细讲解----------------

tf.keras.Sequential
Sequential 是 Keras 提供的最简单的模型容器。
它表示：按顺序堆叠的各层（一层接一层，从输入到输出，中间没有分支或多输入多输出）。
只适用于“直通式”网络，比如全连接、CNN、RNN（如果结构简单）
'''
model = tf.keras.Sequential([ # 构建一个Sequential模型
    # 第一步：拉平数据，为什么要拉平数据？
    # 因为我们要使用Dense层，它需要输入的数据是一维的，所以需要把输入的数据拉平
    tf.keras.layers.Flatten(input_shape=(28, 28)), # 把输入的数据拉平
    # 上面的 input_shape=(28,28) 表示预先告诉模型输入数据的形状，
    '''
    tf.reshape(input_shape,[784,]), # 把输入的数据拉平，不能这样写。
    上面这两个都是拉平数据，功能是等价的，但是reshape是函数，而Flatten是层。
    模型中，只能写层，模型中是无法调用函数的，想要调用函数，只能先把函数封装成层，或者自定义层。
    ''',

    # 第二步：添加全连接层，
    # 加一层「全连接层（Dense Layer）」，里面有 128 个神经元，每个神经元都会对输入做「线性加权 + 偏置 + 激活函数」。
    tf.keras.layers.Dense(128, activation='relu'), # 全连接层，128个神经元，激活函数是relu
    # 这一层有128个神经元，也可以叫神经元层。
    #


    '''
    什么叫全连接层？
    --> Dense 就是 全连接层。意思是「上一层输出的每个值，和这一层的每个神经元，都有连接」。
    什么叫神经元？
    --> 神经元就是神经网络的基本单元，是对输入信号进行处理的基本单元。
    什么叫激活函数？
    --> 激活函数就是用来处理神经元的输出的函数。
    详情见文件：大模型学习.txt
    ''',
    tf.keras.layers.Dense(10)




])